[broadway] Track window type in browser
authorAlexander Larsson <alexl@redhat.com>
Tue, 5 Apr 2011 10:27:43 +0000 (12:27 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 7 Apr 2011 08:03:17 +0000 (10:03 +0200)
gdk/broadway/broadway-demo.c
gdk/broadway/broadway.c
gdk/broadway/broadway.h
gdk/broadway/broadway.js
gdk/broadway/gdkwindow-broadway.c

index d46b336a6bf039b4667f4f40033cd44c394f2325..70c5ff97504728de9f78ed18ffb7d67711630aa2 100644 (file)
@@ -146,7 +146,7 @@ demo2 (BroadwayOutput *output)
   double da = 0;
   int i;
 
-  broadway_output_new_surface(output,  0, 100, 100, 800, 600);
+  broadway_output_new_surface(output,  0, 100, 100, 800, 600, 0);
 
   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
                                        800, 600);
index bada96e29840e89d7e127f262d80738e9dc78ba6..478a4515e2bb106a561b433858b4868b51e5edbc 100644 (file)
 static const char base64_alphabet[] =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
-#if 0
 static void
 base64_uint8 (guint8 v, char *c)
 {
   c[0] = base64_alphabet[(v >> 0) & 0x3f];
   c[1] = base64_alphabet[(v >> 6) & 0x3];
 }
-#endif
 
 static void
 base64_uint16 (guint32 v, char *c)
@@ -685,9 +683,11 @@ broadway_output_ungrab_pointer (BroadwayOutput *output)
 }
 
 void
-broadway_output_new_surface(BroadwayOutput *output,  int id, int x, int y, int w, int h)
+broadway_output_new_surface(BroadwayOutput *output,
+                           int id, int x, int y, int w, int h,
+                           gboolean is_temp)
 {
-  char buf[HEADER_LEN + 15];
+  char buf[HEADER_LEN + 16];
   int p;
 
   p = write_header (output, buf, 's');
@@ -696,6 +696,7 @@ broadway_output_new_surface(BroadwayOutput *output,  int id, int x, int y, int w
   append_uint16 (y, buf, &p);
   append_uint16 (w, buf, &p);
   append_uint16 (h, buf, &p);
+  buf[p++] = is_temp ? '1' : '0';
 
   assert (p == sizeof (buf));
 
index 2f93d27eaa7ecff3f408c94bc2ed37d652aeac1d..86df4df41cedd4212cb98b8ea881acc1a6c1c963 100644 (file)
@@ -18,7 +18,8 @@ void            broadway_output_new_surface     (BroadwayOutput *output,
                                                 int             x,
                                                 int             y,
                                                 int             w,
-                                                int             h);
+                                                int             h,
+                                                gboolean        is_temp);
 void            broadway_output_show_surface    (BroadwayOutput *output,
                                                 int             id);
 void            broadway_output_hide_surface    (BroadwayOutput *output,
index 3f34a2abb9302bb0af0da33d61f379207fafa8b8..bcac3014f89d324cab5a7a4cdc0d008883ee2739 100644 (file)
@@ -92,7 +92,7 @@ var surfaces = {};
 var outstandingCommands = new Array();
 var inputSocket = null;
 
-function initContext(canvas, x, y, id)
+function initContext(canvas, x, y, id, isTemp)
 {
     canvas.surfaceId = id;
     canvas.style["position"] = "absolute";
@@ -103,6 +103,7 @@ function initContext(canvas, x, y, id)
     context.globalCompositeOperation = "source-over";
     document.body.appendChild(canvas);
     context.drawQueue = [];
+    context.isTemp = isTemp;
     context.transientParent = 0;
 
     return context;
@@ -223,10 +224,12 @@ function handleCommands(cmdObj)
            i = i + 3;
            var h = base64_16(cmd, i);
            i = i + 3;
+           var isTemp = cmd[i] == '1';
+           i = i + 1;
            var surface = document.createElement("canvas");
            surface.width = w;
            surface.height = h;
-           surfaces[id] = initContext(surface, x, y, id);
+           surfaces[id] = initContext(surface, x, y, id, isTemp);
            break;
 
        case 'S': // Show a surface
index 24c4bb2458ae9e96a14dea0ee13716a198df6399..4fd138fd3efd57330083580177a4c2abecd8bbbc 100644 (file)
@@ -225,7 +225,8 @@ _gdk_broadway_resync_windows (void)
                                   window->x,
                                   window->y,
                                   window->width,
-                                  window->height);
+                                  window->height,
+                                  window->window_type == GDK_WINDOW_TEMP);
       if (GDK_WINDOW_IS_MAPPED (window))
        {
          broadway_output_show_surface (display->output, impl->id);
@@ -363,7 +364,8 @@ _gdk_broadway_display_create_window_impl (GdkDisplay    *display,
                                 window->x,
                                 window->y,
                                 window->width,
-                                window->height);
+                                window->height,
+                                window->window_type == GDK_WINDOW_TEMP);
 }
 
 static void